<?php
$string = "Test string <blockquote>Level 1.a</blockquote> some more <blockquote>Level 1.b<blockquote>Level 2.b</blockquote></blockquote> Even more 
<blockquote>Level <blockquote><blockquote>Level 3.c</blockquote> 2.c</blockquote>Level 1.c</blockquote> other form <blockquote><blockquote>Level <blockquote>Level 3.d</blockquote> 2.d</blockquote>Level 1.d</blockquote>";

//$string = "Test string";

$patternFind = '{          				 # recursive regex to capture contents of blockquote
<blockquote>             				 # match the blockquote opening tag
  (                                   	 # capture blockquote contents into $1
    (?:                               	 # non-cap group for nesting * quantifier
      (?: (?!<blockquote>|</blockquote>). )++  # possessively match all non-blockquote tag chars
    |                                 	 # or 
      <blockquote>(?1)</blockquote>      # recursively match nested <blockquote>xyz</blockquote>
    )*                                   # loop however deep as necessary
  )                                   	 # end group 1 capture
</blockquote>                            # match the blockquote closing tag
}six';  // single-line (dot matches all), ignore case and free spacing modes ON



preg_match_all($patternFind, $string, $matches, PREG_SET_ORDER);


print_r($matches);

//$html = str_get_html($string);
//$tags = $html->find("blockquote");

//print_r($tags);